// 图片上传地址

const express = require("express");
const router = express.Router();

const fs = require("fs");
const path = require("path");
/* formidable用于解析表单数据，特别是文件上传 */
const { IncomingForm } = require("formidable");
/* 用于时间格式化 */
const formatTime = require("silly-datetime");

// 上传图片
router.post("/updateimg", (req, res) => {
	/* 创建上传表单 */
	const form = new IncomingForm({
		multiples: true,
		keepExtensions: true,
		maxFieldsSize: 2 * 1024 * 1024,
	});
	// 文件保存地址
	form.uploadDir = path.join(__dirname, "../images");

	/* 格式化form数据 */
	form.parse(req, (err, fields, files) => {
		// let key = Object.keys(files)
		// var file = files[key];
		var file = files.file;

		/* 如果出错，则拦截 */
		if (err) {
			return res.json({ status: 500, msg: "服务器内部错误", result: "" });
		}
		/* 上传图片不能大于2M */
		if (file.size > 2 * 1024 * 1024) {
			fs.unlink(file.filepath, () => {
				return res.json({
					status: -1,
					msg: "图片不能超过2M",
					result: "",
				});
			});
		}
		/* 拼接新的文件名 */
		let time = formatTime.format(new Date(), "YYYYMMDDHHmmss");
		let num = Math.floor(Math.random() * 8999 + 10000);
		let imageName = `${time}_${num}.${file.newFilename}`;
		let newPath = form.uploadDir + "/" + imageName;

		// /* 更改名字和路径 */
		fs.rename(file.filepath, newPath, (err) => {
			// errno 即错误代码，0 表示没有错误。
			//       如果有错误，errno != 0，可通过下文中的监听函数 fail 拿到该错误码进行自定义处理
			if (err) {
				return res.json({ errno: 1 });
			} else {
				// return res.json({ 'status': 200, 'msg': '图片上传成功', result: { url: `http://localhost:5000/serverImage/${imageName}` } });
				return res.json({
					errno: 0,
					data: [
						{
							url: `http://localhost:5001/images/${imageName}`,
							alt: "",
							href: "",
						},
					],
				});
			}
		});
	});
});

// 删除图片
router.post("/deleimg", (req, res) => {
	req.body.forEach((item) => {
		let arr = item.split("/");
		let name = arr[arr.length - 1];

		// 文件保存地址
		var filepath = path.join(__dirname, `../images/${name}`);
		fs.unlinkSync(filepath);
	});
	res.json("成功");
});

module.exports = router;
